package com.example.springboot.compoent;

import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.WebRequest;

import java.util.Map;

/**
 * 自定义errorAttributes改变默认信息
 * DefaultErrorAttributes容器中默认的错误属性类
 * BasicErrorController 默认配置的错误处理类
 * 如果发生错误，会以http的状态码作为视图页地址（viewName），找到真正的页面
 * ① 执行目标方法时，所有的异常都会被catch,而且标志请求结束，用dispatchException处理
 * ② 进入视图解析流程
 *
 * @Author:ChenZhangKun
 * @Date: 2020/9/23 21:30
 */
@Component
public class MyErrorAttributes extends DefaultErrorAttributes {
    /**
     * 返回的map就是页面和json能获取的所有属性
     *
     * @param webRequest
     * @param options
     * @return
     */
    @Override
    public Map<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {
        Map<String, Object> errorAttributes = super.getErrorAttributes(webRequest, options);
        errorAttributes.put("company", "agile");
        // 我们自己的所需要的携带的数据
        // 0代表request请求域中
        // 1代表session域
        Map<String, Object> ext = (Map<String, Object>) webRequest.getAttribute("ext", 0);
        errorAttributes.put("ext", ext);
        return errorAttributes;
    }
}
